#include "center.h"

/**
 * @brief  PWM初始化函数
 */

void PWM_init(void)
{
    P_SW2 = 0x80;
    PWMCKS = 12; // 12分频系统时钟
    PWMC = 2000; // 设置PWM周期为2000H个PWM时钟,以上两个值PWM1-6公用，设定一次即可

    // 初始速度设置为0
    PWM0T1 = 0; // 在计数值为0地方输出低电平
    PWM0T2 = 0; // 在计数值为0地方输出高电平
    PWM1T1 = 0; // 在计数值为0地方输出低电平
    PWM1T2 = 0; // 在计数值为0地方输出高电平

    PWM0CR = 0x80; // 使能PWM0输出（P2.0）
    PWM1CR = 0x80; // 使能PWM1输出（p2.1）

    P_SW2 = 0x00; // 关闭设置开关
    PWMCR = 0x80; // 启动PWM模块
}

/**
 * @brief  设置PWM的占空比
 * @param PIN PWM通道，0或1
 * @param duty PWM的占空比，范围是-100到100
 * @note 此函数用于设置指定通道的PWM波的占空比占空比的取值范围是-100到100,\
 * 表示负百分比到正百分比。通道参数用于指定要设置的PWM通道，目前只支持通道0和通道1
 */

void PWM_Duty_Set(uint16 PIN,uint16 duty)
{
    P_SW2 = 0x80;

    if (duty == 0) // 停止转动
    {
        PWM0HLD = 0x01; // 设置PWM0的保持寄存器，可能用于停止PWM输出
        PWM1HLD = 0x01; // 设置PWM1的保持寄存器，可能用于停止PWM输出
    }
    else if (PIN == 0) // 逆时针转动
    {
        PWM1T1 = duty * 20; // 计算PWM0的占空比，顺时针旋转
        PWM0HLD = 0x01; // 失能PWM0的输出
        PWM1HLD = 0x00; // 使能PWM1的输出
    }
    else// 顺时针旋转
    {
        PWM0T1 = duty * 20; // 计算PWM0的占空比，顺时针旋转
        PWM0HLD = 0x00;     // 失能PWM0的输出
        PWM1HLD = 0x01;     // 使能PWM1的输出
    }

    P_SW2 = 0x00;
}
